/** * */ package com.github.gwtbootstrap.showcase.client.validation; import java.lang.annotation.Annotation; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import javax.validation.ConstraintValidator; import javax.validation.ConstraintViolation; import javax.validation.Path; import javax.validation.Payload; import javax.validation.constraints.NotNull; import javax.validation.metadata.ConstraintDescriptor; import com.github.gwtbootstrap.showcase.client.validation.ValidationErrorsView.LoginDetails; import com.google.gwt.activity.shared.AbstractActivity; import com.google.gwt.editor.client.EditorDriver; import com.google.gwt.event.shared.EventBus; import com.google.gwt.user.client.ui.AcceptsOneWidget; import com.google.gwt.validation.client.impl.PathImpl; /** * Showcase for <code>ErrorEditor</code>s validation decoration of <code>TextBox</code>es. * * @author ivangsa * */ public class ValidationErrorsActivity extends AbstractActivity implements ValidationErrorsView.Delegate { private ValidationErrorsView view; /** * @see com.google.gwt.activity.shared.Activity#start(com.google.gwt.user.client.ui.AcceptsOneWidget, com.google.gwt.event.shared.EventBus) */ @Override public void start(AcceptsOneWidget panel, EventBus eventBus) { view = new ValidationErrorsViewImpl(this); panel.setWidget(view); } @Override public void onLoginClick() { EditorDriver<LoginDetails> editorDriver = view.getEditorDriver(); LoginDetails login = editorDriver.flush(); Set<ConstraintViolation<LoginDetails>> violations = validate(login); /* This will decorate widgets implementing HasEditorErrors with validation messages */ editorDriver.setConstraintViolations((Set)violations); } private Set<ConstraintViolation<LoginDetails>> validate(LoginDetails login){ Set<ConstraintViolation<LoginDetails>> violations = new HashSet<ConstraintViolation<LoginDetails>>(); if(login.getUsername() == null || "".equals(login.getUsername().trim())) { violations.add(buildNotNullConstraintViolation(login, "username")); } if(login.getPassword() == null || "".equals(login.getPassword().trim())) { violations.add(buildNotNullConstraintViolation(login, "password")); } return violations; } /* * Building a Validation Constraints by hand * Nothing really interesting here.. */ private ConstraintViolation<LoginDetails> buildNotNullConstraintViolation(final LoginDetails bean, final String path) { return new ConstraintViolation<LoginDetails>() { @Override public String getMessage() { return "may not be null"; } @Override public String getMessageTemplate() { return null; } @Override public LoginDetails getRootBean() { return bean; } @Override public Class<LoginDetails> getRootBeanClass() { return LoginDetails.class; } @Override public Object getLeafBean() { return bean; } @Override public Path getPropertyPath() { return new PathImpl().append(path); } @Override public Object getInvalidValue() { return null; } @Override public ConstraintDescriptor<?> getConstraintDescriptor() { return new ConstraintDescriptor<NotNull>() { private NotNull annotation = new NotNull(){ public Class<? extends Annotation> annotationType() { return NotNull.class; } public Class[] groups() { return new Class[] {};} public String message() { return "{javax.validation.constraints.NotNull.message}";} public Class[] payload() { return new Class[] {};} }; @Override public NotNull getAnnotation() { return annotation; } @Override public Set<Class<?>> getGroups() { return new HashSet(Arrays.asList(new Class[]{javax.validation.groups.Default.class})); } @Override public Set<Class<? extends Payload>> getPayload() { return new HashSet(Arrays.asList(new Class[] {})); } @Override public List<Class<? extends ConstraintValidator<NotNull, ?>>> getConstraintValidatorClasses() { return null; } @Override public Map<String, Object> getAttributes() { Map<String, Object> attributes = new HashMap<String, Object>(); attributes.put("message", "{javax.validation.constraints.NotNull.message}"); attributes.put("payload", new java.lang.Class[] {}); attributes.put("groups", new java.lang.Class[] {javax.validation.groups.Default.class}); return attributes; } @Override public Set<ConstraintDescriptor<?>> getComposingConstraints() { return null; } @Override public boolean isReportAsSingleViolation() { return false; } }; } }; } }